Brief Full Advanced Search Search Tips
|  |  | To access the contents, click the chapter and section titles. Visual Basic 6 Programming Blue Book: The Most Complete, Hands-On Resource for Writing Programs with Microsoft Visual Basic 6! (Publisher: The Coriolis Group) Author(s): Peter G. Aitken ISBN: 1576102815 Publication Date: 08/01/98 Search this book:
Previous | Table of Contents | Next
A Demonstration I could go on and on explaining various details of how the TreeView control works, but I think the best way to explain it is to show you. We will create a simple program that demonstrates the most important features of the TreeView control. Start a Standard EXE project. Place the following controls on the form, leaving all properties at their default values except for the ones listed: • TreeView Name: TV1 • ImageList • Command Button Name: cmdAddNode Caption: Add a Node • Text Box Index: 0 Multiline: True Note that you must set the Index property of the Text Box control to 0 to designate it as a control array. Even though the array has only this one member at design time, you can add array members at runtime. This would not be possible if the Index property were left at its default blank value. Arrange the controls as shown in Figure 7.1. Next, use the Add Form command on the Project menu to add a new form to the project. Assign this form the Name property of frmAddNode and the Caption property Add a Node. Put the following controls on the form: • Text Box Name: txtNodeName • Label Caption: Node name: • Frame Name: Frame1 Caption: Node level Figure 7.1 Creating the main form for the TreeView demonstration program. • Frame : Name: Frame2 Caption: Node type: • Command Button (array of 2) Index 0 Caption: OK Index 1 Caption: Cancel Next, you need to draw two Option Buttons on each of the Frame controls. Remember, you must draw each Option Button within the borders of the Frame control, so they can be treated as a group. On the Frame labeled Node level, put these two Option Buttons: • First button: Caption: &Sibling Name: optSibling Value: True • Second button: Caption: &Child Name: optChild Value: False Then, on the Frame labeled Node type, put these two Option Buttons: • First button: Caption: &Folder Name: optFolder Value: True • Second button: Caption: &Document Name: optDocument Value: False Your finished form will look like Figure 7.2. Before we turn our attention to the code, let’s save the project. I used the names TreeView1.frm and frmAddNode.frm for the form files, and Treeview for the project file. The code for this project is presented in Listings 7.1 (code in TreeView1.frm) and 7.2 (code in frmAddNode.frm). I am not going to hold your hand through all the details of adding code, as I am sure you know the required procedures by now. Furthermore, you should be able to figure out how the code works by looking at the comment lines. Figure 7.2 The completed Add a Node form. Listing 7.1 Code in TreeView1.frm, the main form in the TreeView demonstration program.
    Option Explicit

    ‘ Global variable to hold the Index
    ‘ property of the currently selected node.
    Dim CurrentNode As Integer

    Private Sub cmdAddNode_Click()

    Dim newNode As Node
    Dim nodeType As Integer
    Dim relation As Integer
    Dim picture As String

    ‘ Display the “add a node” form.
    frmAddNode.Show 1

    ‘ If user selected Cancel,
    ‘ don't do anything.
    If frmAddNode.txtNodeName.Text = “” Then Exit Sub

    ‘ Set picture type for document or folder.
    If frmAddNode.optDocument = True Then
        picture = “leaf”
    Else
        picture = “closed”
    End If

    ‘ Specify child node or sibling node.
    If frmAddNode.optSibling.Value = True Then
        relation = tvwNext
    Else
        relation = tvwChild
    End If

    ‘ Be sure the current node is expanded.
    TV1.SelectedItem.Expanded = True

    ‘ Create the new node.
    Set newNode = TV1.Nodes.Add( _
                  TV1.SelectedItem.Index, _
                  relation, , _
                  frmAddNode.txtNodeName.Text, _
                  picture)

    ‘ Deselect the current node and
    ‘ select the new node.
    TV1.SelectedItem.Selected = False
    TV1.Nodes(newNode.Index).Selected = True
    CurrentNode = newNode.Index

    If (TV1.Nodes.Item(CurrentNode).Tag = “doc”) Then
        Text1(CurrentNode).Visible = False
    End If

    ‘ Unhighlight the highlighted node (if any)
    ‘ and highlight the new node.
    Set TV1.DropHighlight = Nothing
    Set TV1.DropHighlight = newNode

    ‘ If the new node is a document node, create its
    ‘ Text Box and make it visible.
    If frmAddNode.optDocument = True Then
        newNode.Tag = “doc”
        Load Text1(newNode.Index)
        Text1(newNode.Index).Text = Str$(newNode.Index)
        Text1(newNode.Index).Visible = True
    Else
        newNode.Tag = “folder”
    End If

    End Sub

    Private Sub Form_Load()

    Dim img As ListImage
    Dim s As String
    Dim newNode As Node

    ‘ Initialize current node pointer.
    CurrentNode = -1

    ‘ Load the ImageList control with bitmaps. Change the
    ‘ path to the bitmap files if necessary. This code assumes
    ‘ they are in the same folder as the application.

    Set img = ImageList1.ListImages.Add _
        (, “open”, LoadPicture _
        (App.Path & “\open.bmp”))
    Set img = ImageList1.ListImages.Add _
        (, “closed”, LoadPicture _
        (App.Path & “\closed.bmp”))
    Set img = ImageList1.ListImages.Add _
        (, “leaf”, LoadPicture _
        (App.Path & “\leaf.bmp”))

    ‘ Clear the TreeView control.
    TV1.Nodes.Clear

    ‘ Set Treeview control properties.
    TV1.ImageList = ImageList1
    TV1.Style = tvwTreelinesPlusMinusPictureText
    TV1.LineStyle = tvwTreeLines

    ‘ Get top node name.
    s = InputBox(“Name for top-level node?”)
    If s = “” Then End

    ‘ Create Node object.
    ‘ Add the first node.
    Set newNode = TV1.Nodes.Add(, , , s, “closed”)
    newNode.Selected = True
    CurrentNode = newNode.Index
    Set TV1.DropHighlight = newNode
    newNode.Tag = “folder”

    End Sub

    Private Sub TV1_NodeClick(ByVal Node As Node)

    ‘ Called when the user clicks a node.

    ‘ If the previous node was a document,
    ‘ hide its Text Box.
    If TV1.Nodes.Item(CurrentNode).Tag = “doc” Then
        Text1(CurrentNode).Visible = False
    End If

    CurrentNode = Node.Index

    ‘ If the newly selected node is a document,
    ‘ show its Text Box.
    If Node.Tag = “doc” Then
        Text1(Node.Index).Visible = True
    End If

    ‘ Highlight the newly selected node.
    Set TV1.DropHighlight = Nothing
    Set TV1.DropHighlight = Node

    End Sub
Listing 7.2 Code in frmAddNode.frm, the second form in the TreeView demonstration program.
    Private Sub Command1_Click(Index As Integer)

    Select Case Index
        Case 0: ‘ OK button
            If txtNodeName.Text = “” Then
                MsgBox (“You must enter a node name!”)
                txtNodeName.SetFocus
                Exit Sub
            Else
                Hide
            End If
        Case 1: ‘ Cancel button
            txtNodeName.Text = “”
            Hide
    End Select

    End Sub
Previous | Table of Contents | Next

| Products | Contact Us | About Us | Privacy | Ad Info | Home Use of this site is subject to certain Terms & Conditions, Copyright © 1996-2000 EarthWeb Inc. All rights reserved. Reproduction whole or in part in any form or medium without express written permission of EarthWeb is prohibited. Read EarthWeb's privacy statement.